home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
MCASM.RAR
/
MC_ASM.EXE
/
WROX_ASM
/
CH9
/
PROTECT
/
KEYDISK.ASM
< prev
Wrap
Assembly Source File
|
1994-05-24
|
3KB
|
173 lines
dosseg
.model small
.stack 100h
.data
Track db ?,0,01,?
db ?,0,02,?
db ?,0,03,?
DPT db 11 dup(?)
MyName db 'Written by Kiselyov J.V. & Malakhov K.A., Inc. ',0
db 256-48 dup (0)
Prg db 'protect_dsk',10
db 256-12 dup (0)
Version db 'Version 1.0',0
db 256-12 dup (0)
bootsec dw 256 dup (?)
oldint1eh dd ?
drive db 0
new_sectsize db 1
boot_tracks db ?
messerr db 'Reading Error',10,13,'$'
messerr1 db 'Writing Error',10,13,'$'
messerr2 db 'Formating Error',10,13,'$'
messok db 'Everything went Ok.',10,13,'$'
.code
mov ax,@data
mov ds,ax
mov es,ax
; Reset controller
xor ah,ah
int 13h
; Read BOOT sector
lea bx,bootsec
mov ax,0201h
mov dl,drive
xor dh,dh
mov cx,1
int 13h
jnc @@pass_010
lea dx,messerr
jmp @@pass_err1
; Store some parameters of disk
@@pass_010:
mov ax,word ptr es:[bx+13h]
mov cx,word ptr es:[bx+18h]
xor dx,dx
div cx
mov cx,word ptr es:[bx+1ah]
xor dx,dx
div cx
mov boot_tracks,al
; Get address of disk parameter table
mov ax,351eh
int 21h
; Store old int 1eh address
push ds
push ds
mov ax,es
mov word ptr oldint1eh+2,ax
mov word ptr oldint1eh,bx
; Copy DPT to the buffer DPT
mov ds,ax
pop es
mov si,bx
lea di,DPT
mov cx,11
rep movsb
pop ds
; Modify "sector size" field
lea di,DPT
mov al,new_sectsize
mov byte ptr es:[di+3],al
; Set new DPT
lea dx,DPT
mov ax,251eh
int 21h
; Prepare data for format
lea bx,Track
mov al,boot_tracks
; Track
mov byte ptr ds:[bx],al
mov byte ptr ds:[bx+4],al
mov byte ptr ds:[bx+8],al
; Sector size
mov al,new_sectsize
mov byte ptr ds:[bx+3],al
mov byte ptr ds:[bx+7],al
mov byte ptr ds:[bx+11],al
; Format last track
lea bx,Track
mov ah,05H
mov al,03h
mov cl,03h
mov ch,boot_tracks
mov dl,drive
xor dh,dh
int 13h
jnc @@pass_020
lea dx,messerr2
jmp @@pass_err
; Write there a specific information
@@pass_020:
lea bx,MyName
mov cl,01h
call WriteDisk
jnc @@pass_030
lea dx,messerr1
jmp @@pass_err
@@pass_030:
lea bx,Prg
mov cl,02h
call WriteDisk
jnc @@pass_040
lea dx,messerr1
jmp @@pass_err
@@pass_040:
lea bx,Version
mov cl,03h
call WriteDisk
jnc @@pass_050
lea dx,messerr1
jmp @@pass_err
@@pass_050:
lea dx,messok
@@pass_err: mov ah,9
int 21h
; Restore previous DPT
mov ax,word ptr oldint1eh+2
mov dx,word ptr oldint1eh
mov ds,ax
mov ax,251eh
int 21h
mov ax,4c00h
int 21h
@@pass_err1: mov ah,9
int 21h
mov ax,4c01h
int 21h
WriteDisk proc near
push bx
push cx
; Write
mov ah,03h
mov al,01h
mov ch,boot_tracks
mov dl,drive
xor dh,dh
int 13h
pop cx
pop bx
jnc no_err
jmp exitproc
no_err:
; Verify
mov ah,04h
mov al,01h
mov ch,boot_tracks
mov dl,drive
xor dh,dh
int 13h
exitproc: ret
WriteDisk endp
end